package chapter01_Arr

import scala.+:

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test03_List
 * Package: chapter01_Arr
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-07-13
 *          Time: 22:36
 */

//不可变列表 List
object Test03_List {
  def main(args: Array[String]): Unit = {
    //List默认是不可变集合 创建List数据有序 可重复
    //创建一个List 是一个抽象类 不能直接new 使用伴生对象创建
    val list = List(12, 23, 34)

    //访问元素 索引1
    println(list(1)) //23

    //Array 数组 可变和不可变都可以修改
    //不能修改
    //list(2) = 100

    //遍历
    println("----foreach遍历----")
    list.foreach(println)


    println("----普通遍历-------")
    for (i <- list.indices) {
      println(list(i))
    }

    println("---for增强遍历---")
    for (elem <- list) {
      println(elem)
    }

    //迭代器遍历
    println("--迭代器遍历----")
    val iterator = list.iterator
    while (iterator.hasNext) {
      println(iterator.next())
    }

    //添加元素 不可变列表List 生成新的list
    //最前添加  有·看加号前后顺序
    val list1 = list.+:(10)
    println(list1) //List(10, 12, 23, 34)

    ///末尾追加
    val list2 = list1.:+(99)
    println(list2)

    //也可以省略 :要靠近引用类型
    val list3 = list2 :+ (808)
    //List(10, 12, 23, 34, 99, 808) 添加一个元素
    println(list3) //List(10, 12, 23, 34, 99, (808,111)) 添加两个元素

    //List列表 新增了双冒号 :: 括号不能省略
    //这是首加加 加在最前面 只有前加加
    val list4 = list.::(66)
    println(list4)

    //更多是利用双冒号 创建一个新列表
    //Nil表示一个空集合
    val list5 = Nil.::(12, 19)
    //一个元素是List(19)
    println(list5) //List((12,19))
    //也可以省略冒号
    val list6 = 32 :: Nil
    println(list6)
    //按照顺组创建数组
    val list7 = 12::23::34::Nil
    println(list7) //List(12, 23, 34)

    //双冒号还可以合并列表
    val list8 = list7 :: list6
    println(list8) //List(List(12, 23, 34), 32)

    //还有三冒号 ::: 也叫扁平化
    val list9 = list6 ::: list7
    println(list9)
    //使用两个 ++ 效果等同
    val list10 = list6 ++ list7
    println(list10)


  }
}
